﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using SAPPDI.Entitys.Annotations;

namespace SAPPDI.Entitys
{
    public class Encuadernado : INotifyPropertyChanged
    {
        private double _Gramaje;
        public double Gramaje
        {
            get
            {
                return _Gramaje;
            }
            set
            {
                _Gramaje = value;
                NotifyPropertyChanged("Gramaje");
            }
        }

        private List<CatalogoInfo> _tipoEncuadernado;

        public List<CatalogoInfo> TipoEncuadernado
        {
            get { return _tipoEncuadernado; }
            set
            {
                this._tipoEncuadernado = value;
                NotifyPropertyChanged("TipoEncuadernado");
            }
        }


        private CatalogoInfo _SelectedTipoEncuadernado;
        public CatalogoInfo SelectedTipoEncuadernado
        {
            get
            {
                return _SelectedTipoEncuadernado;
            }
            set
            {
                _SelectedTipoEncuadernado = value;
                NotifyPropertyChanged("SelectedTipoEncuadernado");
                NotifyPropertyChanged("VisibilityArillo");
                NotifyPropertyChanged("VisibilityRustico");
            }
        }

        private bool _visibilityArillo;
        public bool VisibilityArillo
        {
            get
            {
                if (_SelectedTipoEncuadernado == null || _SelectedTipoEncuadernado.Descripcion == "Pegado")
                    return false;
                return _SelectedTipoEncuadernado.Descripcion == "Engargolado";
            }
            set
            {
                _visibilityArillo = value;
                NotifyPropertyChanged("VisibilityArillo");
            }
        }

        private bool _visibilityRustico;
        public bool VisibilityRustico
        {
            get
            {
                if (IsCaballo)
                    return true;
                if (_SelectedTipoEncuadernado == null || _SelectedTipoEncuadernado.Descripcion == " Engargolado")
                    return false;
                return _SelectedTipoEncuadernado.Descripcion == "Pegado";
            }
            set
            {
                _visibilityRustico = value;
                NotifyPropertyChanged("VisibilityRustico");
            }
        }

        private TipoPapel _SelectedTipoPapel;
        public TipoPapel SelectedTipoPapel
        {
            get
            {
                return _SelectedTipoPapel;
            }
            set
            {
                _SelectedTipoPapel = value;
                if (_SelectedTipoPapel != null)
                    this.Papel = _SelectedTipoPapel.Papels;
                NotifyPropertyChanged("SelectedTipoPapel");
            }
        }

        private Papel _SelectedPapel;
        public Papel SelectedPapel
        {
            get
            {
                return _SelectedPapel;
            }
            set
            {
                _SelectedPapel = value;
                NotifyPropertyChanged("SelectedPapel");
            }
        }

        private List<Papel> _papels;

        public List<Papel> Papel
        {
            get { return this._papels; }
            set
            {
                this._papels = value;
                NotifyPropertyChanged("Papel");
            }
        }


        private List<TipoPapel> _Tipopapels;

        public List<TipoPapel> TipoPapels
        {
            get { return this._Tipopapels; }
            set
            {
                this._Tipopapels = value;
                NotifyPropertyChanged("TipoPapels");
            }
        }

        private bool _isRustica;

        public bool IsRustica
        {
            get { return _isRustica; }
            set
            {
                this._isRustica = value;
                NotifyPropertyChanged("IsRustica");
            }
        }

        private bool _isPastaDura;

        public bool IsPastaDura
        {
            get { return _isPastaDura; }
            set
            {
                this._isPastaDura = value;
                NotifyPropertyChanged("IsPastaDura");
            }
        }

        private bool _isCaballo;

        public bool IsCaballo
        {
            get { return _isCaballo; }
            set
            {
                this._isCaballo = value;
                NotifyPropertyChanged("IsCaballo");
                NotifyPropertyChanged("VisibilityRustico");
            }
        }

        private bool _isGramos;

        public bool IsGramos
        {
            get { return _isGramos; }
            set
            {
                this._isGramos = value;
                NotifyPropertyChanged("IsGramos");
            }
        }
        private bool _isPuntos;

        public bool IsPuntos
        {
            get { return _isPuntos; }
            set
            {
                this._isPuntos = value;
                NotifyPropertyChanged("IsPuntos");
            }
        }

        private bool _is4x4;

        public bool Is4x4
        {
            get { return _is4x4; }
            set
            {
                this._is4x4 = value;
                NotifyPropertyChanged("Is4x4");
            }
        }

        private bool _is1x1;

        public bool Is1x1
        {
            get { return _is1x1; }
            set
            {
                this._is1x1 = value;
                NotifyPropertyChanged("Is1x1");
            }
        }
        private bool _is4x1;

        public bool Is4x1
        {
            get { return _is4x1; }
            set
            {
                this._is4x1 = value;
                NotifyPropertyChanged("Is4x1");
            }
        }
        private bool _is1x0;

        public bool Is1x0
        {
            get { return _is1x0; }
            set
            {
                this._is1x0 = value;
                NotifyPropertyChanged("Is1x0");
            }
        }
        private bool _is4x0;

        public bool Is4x0
        {
            get { return _is4x0; }
            set
            {
                this._is4x0 = value;
                NotifyPropertyChanged("Is4x0");
            }
        }
        private bool _isOtros;

        public bool IsOtros
        {
            get { return _isOtros; }
            set
            {
                this._isOtros = value;
                NotifyPropertyChanged("IsOtros");
            }
        }


        private int _tintaUno;

        public int TintaUno
        {
            get { return _tintaUno; }
            set
            {
                this._tintaUno = value;
                NotifyPropertyChanged("TintaUno");
            }
        }


        private int _tintaDos;

        public int TintaDos
        {
            get { return _tintaDos; }
            set
            {
                this._tintaDos = value;
                NotifyPropertyChanged("TintaDos");
            }
        }
        private bool _isSujeto;

        public bool IsSujeto
        {
            get { return _isSujeto; }
            set
            {
                this._isSujeto = value;
                NotifyPropertyChanged("IsSujeto");
            }
        }

        public string GetTintas()
        {
            if (this.Is1x0)
            {
                return "1x0";
            }
            if (this.Is1x1)
            {
                return "1x1";
            }
            if (this.Is4x0)
            {
                return "4x0";
            }
            if (this.Is4x1)
            {
                return "4x1";
            }
            if (this.Is4x4)
            {
                return "4x4";
            }
            if (this.IsOtros)
            {
                return this.TintaUno.ToString() + "x" + this.TintaDos.ToString();
            }
            return string.Empty;
        }


        private double _solapaUno;

        public double SolapaUno
        {
            get { return _solapaUno; }
            set
            {
                this._solapaUno = value;
                NotifyPropertyChanged("SolapaUno");
            }
        }

        private double _solapaDos;

        public double SolapaDos
        {
            get { return _solapaDos; }
            set
            {
                this._solapaDos = value;
                NotifyPropertyChanged("SolapaDos");
            }
        }

        private double _volado;

        public double Volado
        {
            get { return _volado; }
            set
            {
                this._volado = value;
                NotifyPropertyChanged("Volado");
            }
        }

        private bool _soloHorizontal;

        public bool SoloHorizontal
        {
            get { return _soloHorizontal; }
            set
            {
                this._soloHorizontal = value;
                NotifyPropertyChanged("SoloHorizontal");
            }
        }


        private bool _isArilloMetalico;

        public bool IsArilloMetalico
        {
            get { return _isArilloMetalico; }
            set
            {
                this._isArilloMetalico = value;
                NotifyPropertyChanged("IsArilloMetalico");
            }
        }

        public Encuadernado()
        {
            this._isGramos = true;
            this._isRustica = true;
            this._is4x4 = true;
            this._isArilloMetalico = true;
            this._soloHorizontal = true;
        }

        public string GetTipoPasta()
        {
            if (this.IsPastaDura)
            {
                return "Pasta dura";
            }
            if (this.IsRustica)
            {
                return "Rustica";
            }
            if (this.IsCaballo)
            {
                return "Caballo";
            }
            return string.Empty;
        }

        public event PropertyChangedEventHandler PropertyChanged;

        [NotifyPropertyChangedInvocator]
        protected virtual void NotifyPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
